package com.eshop.eshopmanagersystem.idal;

import com.eshop.eshopmanagersystem.model.BarcodeInfo;
import com.eshop.eshopmanagersystem.unti.Pager;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 管理端数据接口
 *
 */

@Mapper
@Component
public interface IManagerDAL {

    /**
     * 加载分页数据，查询所有
     * 参数1：startIndex
     * 参数2：pageSize
     */
    @Select("select * from barcodes order by id desc limit #{startIndex},#{pageSize} ")
    public List<BarcodeInfo> getProductByPager(Pager pager);

    /**
     * 分页功能：查询数据总条数用来计算页码
     */
    @Select("select count(id) from barcodes")
    public Integer getProductTotalNumber();


    /**
     * 带条件查询的分页功能
     * 关键字 name
     */
    @Select("SELECT * FROM barcodes WHERE name like concat('%',#{name},'%') ORDER BY id DESC LIMIT #{startIndex},#{pageSize}")
    public List<BarcodeInfo> getProductByPagerAndKeyname(Pager pager);


    /**
     * 带条件查询的分页功能
     * 关键字 name
     * 计算分页页数
     */
    @Select("SELECT count(*) FROM barcodes  WHERE name like concat('%',#{name},'%')")
    public Integer getProductTotalNumberByKeyname(Pager pager);

    /**
     * 更新产品列表表单数据
     *
     */
    @Update("UPDATE barcodes set name=#{name} , spec=#{spec}, unit = #{unit}, price=#{price},in_price=#{in_price},brand=#{brand},supplier=#{supplier} " +
            ",made_in = #{made_in} , updated_at =CURRENT_TIMESTAMP WHERE id=#{id}")
    public Integer editProductById(BarcodeInfo barcodeinfo);

    /**
     * 添加商品时，自动验证产品是否存在
     * 异步实现
     * 参数：barcode
     */
    @Select("SELECT count(*) FROM barcodes where barcode = #{barcode }")
    public Integer validateProductIsExist(BarcodeInfo barcodeInfo);

    /**
     * 添加商品
     */
    @Insert("insert into barcodes(barcode,`name`,spec,unit,price,in_price,brand,supplier,made_in)VALUES(#{barcode},#{name},#{spec},#{unit},#{price},#{in_price},#{brand},#{supplier},#{made_in})")
    public Integer addProduct(BarcodeInfo barcodeInfo);

    /**
     *  产品列表管理
     *  批量删除商品
     *  参数：id的集合
     */
    @Delete("DELETE FROM barcodes where id in (${ids})")
    public Integer deleteProduct(BarcodeInfo barcodeInfo);
}
